home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-08-15 | 2.6 KB | 85 lines | [TEXT/CCL2] |
- ;;;
- ;;; object-FDI-mouse-copy-glue.lisp
- ;;;
-
- #|
- ================================================================
- Purpose ========================================================
- ================================================================
- Defines functions to make the "MOUSE-COPY" example do links.
-
-
- ================================================================
- Status =========================================================
- ================================================================
- In-progress.
-
-
- ================================================================
- Change history =================================================
- ================================================================
- 15-Aug-92 mc Created.
-
- |#
-
-
- (in-package "CCL")
-
- (require "MOUSE-COPY")
- (require "OBJECT-FRED-DIALOG-ITEM" "CCL:UMASS Utils;object-fred-dialog-item")
-
-
- ;;;================================================================
- ;;; Define functions to make the "MOUSE-COPY" example do links.
- ;;;================================================================
-
- #|
- Since mouse copy uses text, and since we need objects to call add-link,
- we need a convention for doing so. Our solution uses a convention
- similar to mouse copy's which sets * to the object, except participating
- give-text methods set *l-object-given* to a list of the form
- (:gave-object-text object) where object is the object that was clicked
- on to generate give-text's string.
- |#
-
-
- (defparameter *l-object-given* ()
- "A list of the form (:gave-object-text object), set by following general
- give-text method.")
-
-
- (defmethod give-text :before ((v t))
- "Resets *l-object-given* to nil so we can know whether object text was
- given."
- ;;
- (setf *l-object-given* nil))
-
-
- ;;; Patch mouse-copy's give-text methods that set * :
-
- (defmethod give-text :after ((v sequence-dialog-item))
- (setf *l-object-given* `(:gave-object-text ,*)))
-
- (defmethod give-text :after ((view inspector::inspector-view))
- (setf *l-object-given* `(:gave-object-text ,*)))
-
- (defmethod give-text :after ((w menu-of-defs-dialog))
- (setf *l-object-given* `(:gave-object-text ,*)))
-
-
- (defmethod insert-text ((v object-fred-dialog-item) string)
- "If *l-object-given* is a list of the form described above then add-link
- is called on *l-object-given*'s second value. Otherwise does the usual."
- (declare (ignore string)
- (optimize speed))
- ;;
- (cond ((and *l-object-given*
- (not (stringp (second *l-object-given*))))
- (add-link v (second *l-object-given*) (buffer-position (fred-buffer v)))
- (fred-update v))
- (t (call-next-method))))
-
-
- ;;; Done.
-
- (provide "OBJECT-FDI-MOUSE-COPY-GLUE")